package com.gzz.manage.base.customer;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
//import org.springframework.test.web.servlet.MvcResult;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
/**
 * @类说明 【客户信息】测试工具，将本类移到maven测试目录中或测试完成之后删除
 * @author 高振中
 * @date 2019-01-12 22:40:08
 **/
@Slf4j
@SpringBootTest
@AutoConfigureMockMvc
@RunWith(SpringRunner.class)
public class MockMvcTestCustomer {
	@Autowired
	private MockMvc mvc;
	@Autowired
	private ObjectMapper mapper;
	/**
	 * @方法说明 测试 新增【客户信息】,根据数据类型修改每个字段的值
	 */
	//@Test
	public void save() throws Exception {
		Customer vo = Customer.builder()
		//.id("gaozz") // 设置【主键】的值
		//.username("gaozz") // 设置【用户名】的值
		//.password("gaozz") // 设置【密码】的值
		//.wechat("gaozz") // 设置【微信号】的值
		//.address("gaozz") // 设置【地址】的值
		//.avatar("gaozz") // 设置【头像】的值
		//.remark("gaozz") // 设置【备注】的值
		//.tel("gaozz") // 设置【电话号】的值
		//.levelId("gaozz") // 设置【会员等级】的值
		//.createTime("gaozz") // 设置【注册时间】的值
		//.updateTime("gaozz") // 设置【修改时间】的值
		.build();
		log.info(doRequest("/customer/save", vo));
	}
	/**
	 * @方法说明 测试 查询【客户信息】列表,条件可以为空,可直接运行
	 */
	@Test
	public void queryList() throws Exception {
		CustomerCond cond = CustomerCond.builder()//拼查询条件
				//.id("gaozz")  // 【主键】值
				//.username("gaozz")  // 【用户名】值
				//.password("gaozz")  // 【密码】值
				//.wechat("gaozz")  // 【微信号】值
				//.address("gaozz")  // 【地址】值
				//.avatar("gaozz")  // 【头像】值
				//.remark("gaozz")  // 【备注】值
				//.tel("gaozz")  // 【电话号】值
				//.levelId("gaozz")  // 【会员等级】值
				//.createTime("gaozz")  // 【注册时间】值
				//.updateTime("gaozz")  // 【修改时间】值
		.build();
		log.info(doRequest("/customer/list", cond));
	}
	/**
	 * @方法说明 测试 查询【客户信息】分页列表,条件可以为空,可直接运行
	 */
	@Test
	public void queryPage() throws Exception {
		CustomerCond cond = CustomerCond.builder()//拼查询条件
				//.id("gaozz")  // 【主键】值
				//.username("gaozz")  // 【用户名】值
				//.password("gaozz")  // 【密码】值
				//.wechat("gaozz")  // 【微信号】值
				//.address("gaozz")  // 【地址】值
				//.avatar("gaozz")  // 【头像】值
				//.remark("gaozz")  // 【备注】值
				//.tel("gaozz")  // 【电话号】值
				//.levelId("gaozz")  // 【会员等级】值
				//.createTime("gaozz")  // 【注册时间】值
				//.updateTime("gaozz")  // 【修改时间】值
		.ids(new Object[]{1,2,3,4})
		.build();
		cond.setPage(0); //当前页
		cond.setSize(10); //页大小
		log.info(doRequest("/customer/page", cond));
	}
	
	private <T> String doRequest(String url, T t) throws Exception {// restController专用测试方法
		return mvc.perform(post(url).contentType(MediaType.APPLICATION_JSON).content(mapper.writeValueAsString(t))).andExpect(status().isOk())
				.andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn().getResponse().getContentAsString();
	}
}